服务器监控 - Prometheus & Grafana
本文介绍使用Prometheus和Grafana搭建服务器监控的步骤,并简单介绍其中会涉及到的概念。
基础
术语
时序数据库:Time Series Database(TSDB),顾名思义,就是存放时序数据的数据库,每条数据有时间戳,支持对该类数据的快速读写、持久化、聚合查询等操作。由于有了时间,就可以根据数据回溯,可用于监控、大数据分析、机器学习等。
常见的TSDB有OpenTSDB、InfluxDBm、Prometheus等
Metrics:度量,是Prometheus中的核心概念。直接来看,度量就是一串标识符,例如http_requests_total表示所有http请求的总数
Tags:标签,一个metric可能会记录多种类型数据,比如http_requests_total,可能同时记录了请求的uri,此时就需要标签进行区隔,一个metric可以对应多个标签,此时它就是一个多维数据。
1
http_request_total{uri="ergedd/hello"}
简介
Prometheus
Prometheus是一个开源的监控报警软件,整体结构如下
主要组件如下
Prometheus Server:服务端,包含数据接收模块、时序数据库模块、Http服务模块等
数据接收模块用于连接监控目标,监控目标可以是静态配置的单个服务,也可以是基于服务发现的得到的服务。
时序数据库模块用于存储接收到的时序数据,并存储于硬盘
Http服务暴露API,用于PromQL查询
服务端工作在pull模式,即监控目标需要暴露接口,服务端通过该接口主动拉取数据。
Push Gateway:推送网关。用于接收监控目标主动推送的数据,同时接受服务端的数据拉取
Alter Manager:报警管理器。接收来自服务端的报警推送,并将报警消息发送出去
UI:通过PromQL查询服务端存储的数据,并通过Web页面的形式展示。一般我们不用Prometheus自带的UI模块,而是将数据接入到图形展示功能更加强大的Grafana
此外,完整的Prometheus还应包含针对特定监控目标所编写的Exporter,用于暴露监控数据,对于常规需求,会有开源公共的Exporter,对于特殊需求,可实现自定义的Exporter。
Grafana
Grafana是一个开源的数据分析和展示系统,有两个主要优点:
- 支持各种数据库:Elasticsearch、Graphite、influxDB、Prometheus
- 丰富的展示功能,可以图表、文字等各种方式展示数据,全凭使用者的想象力。
搭建
这里仅搭建一个最简单的系统,打通从exporter到grafana数据流,push网关和报警管理器都暂时忽略。
Prometheus Exporter
监控Linux系统状态,需要用到Node_Exporter,安装它有两种方式,一种是通过源码编译,另一种是直接下载运行,在这里,
下载合适的版本,运行,如下
1 | $ ./node_exporter |
此时在本地9100端口暴露了metrics数据,访问http://localhost:9100/metrics
可以获取到所有数据,数据格式是直接可读的:metric name + tag: value
1 | $ curl http://localhost:9100/metrics |
Prometheus Server
Prometheus在github开源,因此可直接下载最新版,这里就不再贴图了,假设已经下载好了,我们从解压后开始,在解压后的目录下可观察到有如下几个文件
1 | $ ls |
关注prometheus和prometheus.yml,前者是可执行文件,后者是配置文件。
在配置文件中加上exporter数据源,设置每5秒抓取一次数据,目标地址为localhost:9100,抓取路劲默认为/metrics,因此不用再指明。
1 | scrape_configs: |
启动,如下输出代表成功。
1 | ./prometheus --config.file=prometheus.yml |
Prometheus Server默认监听9090端口,访问localhost:9090
来到server界面,可以进行简单的查询操作。
Grafana
Grafana可以安装启动,也可以用docker启动,方便起见,我们使用Docker。
1 | $ sudo docker run -p 3000:3000 grafana/grafana |
安装成功,访问localhost:3000
,可以看到登录界面,默认用户名密码为 admin / admin
添加Prometheus数据源
点击设置 - Data Sources - Add data source - Prometheus
来到数据源设置界面,设置URL为Prometheus Server地址http://localhost:9090
,Access为Browser,即通过浏览器访问,点击Save & Test,出现下图所示的Data source is working
提示即添加成功。
添加Dashboard
Grafana通过Dashboard展示数据,一个Dashboard上可以有多个图表。可以自己创建,也可以将现有的导入,在Grafana Labs中,有很多分享的Dashboard,我们找一个合适的。
点进去,复制它的ID
回到Grafana,点击 创建 - Import ,输入上面的ID8919
,加载成功可显示如下界面
点击导入,Awwwwwwwwwwwwwwwwwwwsome!!! 这里详细地展示了你的设备信息。
轻微探索
Dashboard中每个图表上方都有菜单按钮,可供我们修改
点击View,全屏显示该图表;点击Edit,进入编辑模式。我们点编辑看看
可以看到图表中的每个数据来自于prometheus提供的metrics,并使用PromQL进行查询的结果。自己添加图标也是如此:写PromQL - 配置图表
至此,最简单的监控服务搭建完成。
总结
本文简单搭建了Linux的监控系统,主要目的在于展示Prometheus和Grafana的工作方式,算是科普文。也介绍了基本的工作原理,给扩展留下了空间。但其它重要部分需要读者自己去探索,比如
- Alert Manager
- Push Gateway
- Prometheus和其它TSDB的比较
了解更多
想要更深入了解Prometheus?
想要了解Vertx、Kubernetes如何集成Prometheus?